package com.xebest.web.controller.restapi;

import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.xebest.api.dto.XeUserTypeDTO;
import com.xebest.common.base.controller.BaseController;
import com.xebest.common.base.controller.BaseResponse;
import com.xebest.web.model.XeUserTypeEntity;
import com.xebest.web.service.XeUserTypeService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

import java.util.List;

@Controller
@RequestMapping("restapi/userType")
public class XeUserTypeController extends BaseController {
	private Logger log = LoggerFactory.getLogger(XeUserTypeController.class);
    
    @Autowired
    private XeUserTypeService xeUserTypeService;

    /**
     * 新增用户类型
     */
    @RequestMapping("/insertUserType")
    @ResponseBody
	public BaseResponse insertUserType(@RequestBody @Validated XeUserTypeDTO xeUserTypeDTO){
    	log.info("新增用户类型传入参数： " + JSONObject.toJSONString(xeUserTypeDTO));
    	try {
    		XeUserTypeEntity entity = JSON.parseObject(JSON.toJSONString(xeUserTypeDTO), XeUserTypeEntity.class);
            xeUserTypeService.insertUserType(entity);
		} catch (Exception e) {
			log.error("新增用户类型失败", e);
			return sendAjaxError("新增用户类型失败");
		}
    	return sendRemoteAjaxOK();
	}

    /**
     * 编辑用户类型
     */
    @RequestMapping("/updateByTypeId")
    @ResponseBody
	public BaseResponse updateByTypeId(@RequestBody @Validated XeUserTypeDTO xeUserTypeDTO){
    	log.info("编辑用户类型传入参数： " + JSONObject.toJSONString(xeUserTypeDTO));
    	try {
    		XeUserTypeEntity entity = JSON.parseObject(JSON.toJSONString(xeUserTypeDTO), XeUserTypeEntity.class);
    		xeUserTypeService.updateByTypeId(entity);
		} catch (Exception e) {
			log.error("编辑用户类型失败", e);
			return sendRemoteAjaxError("编辑用户类型失败");
		}
    	return sendRemoteAjaxOK();
	}

    /**
     * 批量删除用户类型
     */
    @RequestMapping("/deleteByTypeIds")
    @ResponseBody
	public BaseResponse deleteByTypeIds(List<Integer> typeIds){
    	String ids = JSONObject.toJSONString(typeIds);
    	log.info("删除用户类型传入参数： " + ids);
    	try {
            String modifyUser = getMisLoginUserInfo().getString("loginName");
            List<XeUserTypeEntity> list = xeUserTypeService.deleteByTypeIds(typeIds, modifyUser);
            if(null != list){ // 用户类型已经被使用，不能删除
                StringBuffer msg = new StringBuffer();
                for(XeUserTypeEntity entity : list){
                    String name = entity.getTypeName();
                    if(msg.length() > 0){
                        msg.append(",").append(name);
                    } else {
                        msg.append(name);
                    }
                }
                return sendAjaxError("用户类型【"+msg.toString()+"】正在使用中，不能删除");
            }
		} catch (Exception e) {
			log.error("删除用户类型失败", e);
			return sendAjaxError("删除用户类型失败");
		}
    	return sendAjaxOK();
	}

}
